package com.example.wacoffee_manage.controller;

import com.example.wacoffee_manage.DTO.UpdatePasswordRequest;
import com.example.wacoffee_manage.Service.employeeService;
import com.example.wacoffee_manage.common.PageResult;
import com.example.wacoffee_manage.pojo.Employee;
import com.example.wacoffee_manage.utils.OssUtils;
import com.example.wacoffee_manage.utils.Result;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/employees")
@Slf4j
public class employeesController {

    @Autowired
    private employeeService employeeService;

    /**
     * 分页查询符合条件的员工列表。
     *
     * @param page       当前页码，默认为1
     * @param pageSize   每页记录数，默认为10
     * @param name       员工姓名（可选查询条件）
     * @param gender     员工性别（可选查询条件，1:男，2:女）
     * @param job        员工职位（可选查询条件，1:店员，2:店长，3:区域负责人）
     * @param storeName  所属门店名称（可选查询条件）
     * @param id         员工ID（可选查询条件）
     * @return 分页查询结果，包含员工列表和总记录数
     */
    @GetMapping
    public Result getAllEmployees(
            @RequestParam(defaultValue = "1") Integer currentPage,
            @RequestParam(defaultValue = "10") Integer pageSize,
            @RequestParam(required = false, name = "name") String name,
            @RequestParam(required = false, name = "gender") Integer gender,
            @RequestParam(required = false, name = "job") Integer job,
            @RequestParam(required = false, name = "storeName") String storeName,
            @RequestParam(required = false, name = "id") Integer id) {
        Employee employee = new Employee();
        employee.setPage(currentPage);
        employee.setPageSize(pageSize);
        if (name != null) employee.setName(name);
        if (gender != null) employee.setGender(gender);
        if (job != null) employee.setJob(job);
        if (storeName != null) employee.setStoreName(storeName);
        if (id != null) employee.setId(id);
        PageResult employees = employeeService.getAll(employee);
        return Result.success(employees);
    }

    /**
     * 添加新员工。
     *
     * @param employee 员工对象，包含所有必要信息（用户名、姓名、性别、手机号、职位、所属门店ID、头像URL）
     * @return 操作结果，成功返回成功信息
     */
    @PostMapping
    public Result addEmployee(@RequestBody Employee employee) {
        employeeService.add(employee);
        return Result.success();
    }

    /**
     * 根据ID删除员工，并删除其关联的头像文件。
     *
     * @param id 员工ID
     * @return 操作结果，成功返回成功信息
     */
    @DeleteMapping
    public Result deleteEmployee(@RequestParam int id) {
        String url = employeeService.getById(id).getImage();
        employeeService.delete(id);
        try {
            OssUtils.delete(url);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return Result.success();
    }

    /**
     * 根据ID获取员工详细信息。
     *
     * @param id 员工ID
     * @return 员工详细信息
     */
    @GetMapping("/{id}")
    public Result getById(@PathVariable int id) {
        Employee employee = employeeService.getById(id);
        return Result.success(employee);
    }

    /**
     * 更新员工信息。
     *
     * @param employee 更新后的员工对象，包含所有需要修改的字段
     * @return 操作结果，成功返回成功信息
     */
    @PutMapping
    public Result update(@RequestBody Employee employee) {

        employeeService.update(employee);
        return Result.success();
    }

    @PutMapping("/updatePassword")
    public Result updatePassword(@RequestBody UpdatePasswordRequest updatePasswordRequest)
    {
        System.out.println(updatePasswordRequest);
        if(updatePasswordRequest.getUsername()==null||updatePasswordRequest.getOldPassword()==null||updatePasswordRequest.getNewPassword()==null||updatePasswordRequest.getConfirmPassword()==null)return Result.error("用户名/密码不能为空");
        if(updatePasswordRequest.getUsername().length()<2)return Result.error("用户名长度不能小于2位");
        if(updatePasswordRequest.getNewPassword().length()>20)return Result.error("密码长度不能大于20位");
        if(updatePasswordRequest.getNewPassword().length()<6)return Result.error("密码长度不能小于6位");
        if(updatePasswordRequest.getOldPassword().equals(updatePasswordRequest.getNewPassword()))return Result.error("新旧密码不能相同");
        if(!updatePasswordRequest.getNewPassword().equals(updatePasswordRequest.getConfirmPassword()))return Result.error("两次密码不一致");
        employeeService.updatePassword(updatePasswordRequest);
        return Result.success();
    }
}